package com.ctvit.cch.core.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ctvit.cch.core.pojo.domain.CreativeScriptDesign;
import com.ctvit.cch.core.pojo.domain.CreativeScriptScene;
import com.ctvit.cch.core.pojo.dto.creative.CreativeScriptDesignGenerateDTO;
import com.ctvit.cch.core.pojo.dto.creative.CreativeScriptDesignRegenerateDTO;
import com.ctvit.cch.core.pojo.vo.creative.CreativeScriptDesignGetVO;
import com.ctvit.cch.core.pojo.vo.creative.CreativeScriptDesignListVO;

/**
 * 脚本设计Service接口
 *
 * @author heyingcheng
 * @date 2025/10/11
 */
public interface ICreativeScriptDesignService extends IService<CreativeScriptDesign> {

    /**
     * 生成脚本
     * 
     * @param dto 脚本生成参数
     * @return 生成结果
     */
    boolean generate(CreativeScriptDesignGenerateDTO dto);

    /**
     * 重新生成脚本
     * 
     * @param dto 脚本生成参数
     * @return 生成结果
     */
    boolean regenerate(CreativeScriptDesignRegenerateDTO dto);

    /**
     * 获取脚本设计详细信息
     * 
     * @param id 脚本ID
     * @return 脚本设计对象
     */
    CreativeScriptDesignGetVO get(String id);

    /**
     * 获取脚本设计详细信息
     * 
     * @param id 选题ID
     * @return 脚本设计对象
     */
    CreativeScriptDesignGetVO getByTopicId(String topicId);

    /**
     * 获取脚本设计列表
     * 
     * @param status 脚本设计状态
     * @return 脚本设计列表
     */
    List<CreativeScriptDesignListVO> listByGenerateStatus(String status);

    /**
     * 获取脚本设计列表
     * 
     * @param status 分镜设计状态
     * @return 脚本设计列表
     */
    List<CreativeScriptDesignListVO> listByShotStatus(String status);

    /**
     * 更新脚本设计状态
     *
     * @param scriptId      脚本设计ID
     * @param currentStatus 当前状态
     * @param targetStatus  目标状态
     * 
     * @return 更新结果
     */
    boolean updateGenerateStatus(String scriptId, String currentStatus, String targetStatus);

    /**
     * 更新脚本设计状态
     *
     * @param scriptId 脚本设计ID
     * @param topicId  选题ID
     * @param status   当前状态
     * @param records  脚本场景列表
     * 
     * @return 更新结果
     */
    boolean updateGenerateStatus(String scriptId, String topicId, String status, List<CreativeScriptScene> records);

    /**
     * 更新分镜设计状态
     *
     * @param topicId  选题ID
     * @param scriptId 脚本ID
     * @param status   分镜状态
     * 
     * @return 更新结果
     */
    boolean updateShotStatus(String topicId, String scriptId, String status);

    /**
     * 完成分镜设计
     *
     * @param topicId  选题ID
     * @param scriptId 脚本ID
     * 
     * @return 完成结果
     */
    boolean completeShotDesign(String topicId, String scriptId);

}